package com.sixbro.caicaitv.util;

import android.util.Log;

import com.sixbro.caicaitv.BuildConfig;


/**
 * Log工具类
 */
public class LogUtils {
    public static final int VERBOSE = 0;
    public static final int DEBUG = 1;
    public static final int INFO = 2;
    public static final int WARN = 3;
    public static final int ERROR = 4;
    public static final int FORBID = 5;

    public static int sLogLevel = VERBOSE;//默认Log等级

    static {
        if (!BuildConfig.DEBUG) {
            sLogLevel = FORBID;
        }
    }

    public static String TAG = "mDebug"; //默认Tag

    private LogUtils() {
        /* cannot be instantiated */
        throw new UnsupportedOperationException("cannot be instantiated");
    }

    /**
     * 自定义Tag
     *
     * @param msg
     */

    public static void v(String msg) {
        v(TAG, msg);
    }

    public static void d(String msg) {
        d(TAG, msg);
    }

    public static void i(String msg) {
        i(TAG, msg);
    }

    public static void w(String msg) {
        w(TAG, msg);
    }

    public static void e(String msg) {
        e(TAG, msg);
    }

    public static void v(String tag, String msg) {
        if (sLogLevel <= VERBOSE) {
            Log.v(tag, createMessage(msg));
        }
    }

    public static void d(String tag, String msg) {
        if (sLogLevel <= DEBUG) {
            Log.d(tag, createMessage(msg));
        }
    }

    public static void i(String tag, String msg) {
        if (sLogLevel <= INFO) {
            Log.i(tag, createMessage(msg));
        }
    }

    public static void w(String tag, String msg) {
        if (sLogLevel <= WARN) {
            Log.w(tag, createMessage(msg));
        }
    }

    public static void e(String tag, String msg) {
        if (sLogLevel <= ERROR) {
            Log.e(tag, createMessage(msg));
        }
    }


    private static String createMessage(String msg) {
        StackTraceElement[] sElements = Thread.currentThread().getStackTrace();
        if (sElements == null) {
            return msg;
        }
        StringBuilder buffer = new StringBuilder();
        buffer.append("[");
        String className = sElements[4].getClassName().substring(sElements[4].getClassName().lastIndexOf(".") + 1);
        if (className.contains("LogUtils")) {
            className = sElements[5].getClassName().substring(sElements[5].getClassName().lastIndexOf(".") + 1);
            buffer.append(className);
            buffer.append("$");
            buffer.append(sElements[5].getMethodName());
            buffer.append(":");
            buffer.append(sElements[5].getLineNumber());
        } else {
            buffer.append(className);
            buffer.append("$");
            buffer.append(sElements[4].getMethodName());
            buffer.append(":");
            buffer.append(sElements[4].getLineNumber());
        }
        buffer.append("] ");
        buffer.append(msg);
        return buffer.toString();
    }
}  